<?php

namespace app\admin\controller;

use think\Controller;
use think\Db;
use think\Request;
use think\Session;

class Role extends Controller
{

    /**角色列表
     * @return \think\response\View
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function index()
    {
        $auth = Session::get('auth');
//        dump($auth['aid']);
        //  查数据库 对应 权限 id   判断该用户有没有
        $rows = Db::field('id')
            ->table('xu_authority')
            ->where('controller', 'role')
            ->where('method', 'index')
            ->find();
//                dump($rows['id']);
//                die;
        if (!in_array($rows['id'], $auth['aid'])) {
            return $this->error('您没有权限访问这里哦!');
        }

        $list = Db::name('xu_role')
            ->field(['id', 'role', 'explain', 'status', 'authority'])
            ->select();

        //模板
        return view('role/index', [
            'title' => '角色列表',
            'add' => '添加角色',
            'list' => $list
        ]);
    }


    /**启用 禁用 状态修改
     * @param $id
     * @throws \think\Exception
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @throws \think\exception\PDOException
     */
    public function status($id)
    {
        //先查到数据
        $data = Db::name('xu_role')
            ->where('id', $id)
            ->select();
//        dump($data);
//        dump($data[0]['status']);
        //再修改数据
        if ($data[0]['status'] == 1) {

            $data[0]['status'] = 2;
        } else {
            $data[0]['status'] = 1;
        }

        $result = Db::name('xu_role')
            ->where('id', $id)
            ->update($data[0]);

        if ($result == 1) {
            return $this->success('状态修改成功', 'admin/role/index');
        } else {
            return $this->error('状态修改失败');
        }


    }


    /**添加角色页面
     * @return \think\response\View
     */
    public function addrole()
    {
         $auth = Session::get('auth');
//        dump($auth['aid']);
        //  查数据库 对应 权限 id   判断该用户有没有
        $rows = Db::field('id')
            ->table('xu_authority')
            ->where('controller', 'role')
            ->where('method', 'addrole')
            ->find();
//                dump($rows['id']);
//                die;
        if (!in_array($rows['id'], $auth['aid'])) {
            return $this->error('您没有权限访问这里哦!');
        }
        return view('role/addrole');
    }


    /**执行添加角色
     * @param Request $request
     */
    public function dorole(Request $request)
    {
        $p = $request->post();

        $rows = Db::name('xu_role')
            ->insert($p);
        if ($rows) {
            return $this->success('创建成功', 'admin/role/index');
        } else {
            return $this->error('创建失败');
        }
    }

    /**加载分配权限
     * @param $id
     * @return array
     */
    public function assigna($id)
    {
        $auth = Session::get('auth');
//        dump($auth['aid']);
        //  查数据库 对应 权限 id   判断该用户有没有
        $rows = Db::field('id')
            ->table('xu_authority')
            ->where('controller', 'role')
            ->where('method', 'assigna')
            ->find();
//                dump($rows['id']);
//                die;
        if (!in_array($rows['id'], $auth['aid'])) {
           $x=1;
        }



        //查询所有该角色  的  权限
        $rows = Db::field(['r.role', 'a.authority'])
            ->table(['xu_role' => 'r', 'xu_role_authority' => 'ra', 'xu_authority' => 'a'])
            ->where('r.id = ra.rid')
            ->where('a.id = ra.aid')
            ->where('r.id=' . $id)
            ->select();

//    得到的查询结果先在 php 处理好
        $arr = [];
        foreach ($rows as $k => $v) {
            $role = $v['role'];

            //获取到 该角色对应的权限 然后push 到新数组
            array_push($arr, $v['authority']);

        }
//            dump($id);
//        dump($rows);
//                dump($role);

//        die;

        $rid = $id;
        //查所有权限  (一共有多少权限)
        $rows2 = Db::field(['authority', 'id'])
            ->table('xu_authority')
            ->select();
//        dump($rows2);die;
        $arrAll = [];
        $aid = [];

        //若是 新增的角色 还未设置权限  则 ...
        if (empty($rows)) {
            $rows = $rows2;
        }

//        dump($rows);
//        die;
        foreach ($rows2 as $k => $v) {
            //获取到 所有的权限 然后push 到新数组
            array_push($arrAll, $v['authority']);
            array_push($aid, $v['id']);

        }
//                dump($arrAll);

//        dump($aid);
//        die;



        return array(
//            'role' => $role,
            'rid' => $rid,
            'authority' => '所有权限',
            'arr' => $arr,
            'arrAll' => $arrAll,
            'aid' => $aid,
            //该页面的 aid
            //该用户的 所有 aid


        );


    }

    /**执行分配权限
     * @param $id
     */
    public function doassigna($rid, $aid)
    {
        $auth = Session::get('auth');
//        dump($auth['aid']);
        //  查数据库 对应 权限 id   判断该用户有没有
        $rows = Db::field('id')
            ->table('xu_authority')
            ->where('controller', 'role')
            ->where('method', 'doassigna')
            ->find();
//                dump($rows);
//                die;
        if (!in_array($rows['id'], $auth['aid'])) {

                         return $this->error('您没有权限');
        }


        //先清空该角色 所有 权限  然后在新增
        Db::name('xu_role_authority')
            ->where('rid=' . $rid)
            ->delete();

        //执行新增 分配该用户的权限   根据 length

//        获取权限个数
        $length = count($aid);
        for ($i = 0; $i < $length; $i++) {

            $data = [
                'rid' => $rid,
                'aid' => $aid[$i]
            ];

//            dump($data);
            $rows = Db::name('xu_role_authority')
                ->insert($data);

        }

        return $rows;
    }


}